﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using rsp.fileAdapter.contract;
using rsp.messages;

namespace rsp.fileAdapter {
    public class FileAdapter : IFileAdapter
    {
        public void ProcessReferenzWorte() {
            var worteAusDatei = LoadFile("wortliste.txt");
            var worteInKleinbuchstaben = InKleinbuchstaben(worteAusDatei);
            var worteAusDateiOhneLeereEinträge = EntferneLeereEinträge(worteInKleinbuchstaben);
            var worte = worteAusDateiOhneLeereEinträge.Select(wort => new Wort(wort)).ToArray();
            OnReferenzWorte(new Worte(worte));
        }

        public event Action<Worte> OnReferenzWorte;

        internal IEnumerable<string> LoadFile(string fileName) {
            return File.ReadAllLines(fileName, Encoding.GetEncoding(850));
        }

        internal IEnumerable<string> EntferneLeereEinträge(IEnumerable<string> wortlisteMitLeerenEinträgen) {
            return wortlisteMitLeerenEinträgen.Except(new []{""});
        }

        internal IEnumerable<string> InKleinbuchstaben(IEnumerable<string> wortliste) {
            return wortliste.Select(wort => wort.ToLower()).ToArray();
        }
    }
}
